﻿Imports Microsoft.DirectX
Imports Microsoft.DirectX.Direct3D
Public Class ObjektEinheitenCheckbox
    Public Breite As Integer = Hauptmenü.Feldbreite * 5 / 2
    Public Höhe As Integer = Hauptmenü.Feldbreite + 4
    Dim Texturen() As Texture = {}
    Public Checked() As Boolean = {}
    Public StartPosition As Point
    Public AnzahlderEinheiteninderBreite As Integer
    Public Spieler As ObjektSpieler
    Private Frames As Integer
    Dim Fixed As PointF
    Public Farbe As Color
    Dim Handler As ObjektPanelEinheitenMenü
    Public Property Frame() As String
        Get
            Return Frames
        End Get
        Set(ByVal value As String)
            Frames += 1
            If Frames > 3 Then
                Frames = 0
            End If
        End Set
    End Property

    Public Sub New(ByVal neuSpieler As ObjektSpieler, ByVal Fixed As PointF, ByVal Handler As ObjektPanelEinheitenMenü, ByVal AnzahlBoxenInDerBreite As Integer, ByVal Pos As Point)
        Breite = Hauptmenü.Feldbreite * 5 / 2
        Me.Fixed = Fixed
        Me.Handler = Handler
        Dim Rest As Integer = 0
        Me.AnzahlderEinheiteninderBreite = AnzahlBoxenInDerBreite
        StartPosition = Pos
        Spieler = neuSpieler
        Me.Farbe = Spieler.Farbe
        Array.Resize(Texturen, 3)
        Texturen(0) = Grafikengine.LoadTexture(Image.FromFile(My.Settings.Resourcenpfad + "Kartenauswahl\EinheitenAuswahl.PNG"), Hauptmenü.Farbtabelleerstellen(Farbe))
        Texturen(1) = Grafikengine.LoadTexture(My.Settings.Resourcenpfad + "Kartenauswahl\Haken.PNG")
        Texturen(2) = Grafikengine.LoadTexture(My.Settings.Resourcenpfad + "Kartenauswahl\Kreuz.PNG")
        ReDim Checked(Objektverwalter.AlleEinheiten.Length - 1)
        For I = 0 To Checked.Length - 1
            Checked(I) = True
        Next
    End Sub
    Public Sub NeueFarbtabelle(ByVal Farbe As Color)
        NeueFarbtabelle(Spieler, Farbe)
    End Sub
    Public Sub NeueFarbtabelle(ByVal Spieler As ObjektSpieler, ByVal Farbe As Color)
        Me.Spieler = Spieler

        Me.Farbe = Farbe
        Dim M As ObjektKartenauswahlMenü = Objektverwalter.Menü
        Spieler = New ObjektSpieler(ObjektKartenauswahlMenü.MomentanerSpieler, Farbe, 0, Nothing, 0, "", "", Nothing, ObjektSpieler.KIStufen.Mensch, 0)
        Texturen(0) = Grafikengine.LoadTexture(Image.FromFile(My.Settings.Resourcenpfad + "Kartenauswahl\EinheitenAuswahl.PNG"), Hauptmenü.Farbtabelleerstellen(Farbe))
        If Not M.Baulisten(Spieler.Spieler) Is Nothing Then
            For I = 0 To Checked.Length - 1
                If M.Baulisten(Spieler.Spieler).GetWert(I) > 0 Then
                    Checked(I) = True
                Else
                    Checked(I) = False
                End If
            Next
        Else
            For I = 0 To Checked.Length - 1
                Checked(I) = True
            Next
        End If
    End Sub
    Public Sub Malen()
        Dim sngRotation As Double = 0
        Dim intColor As Color = Color.FromArgb(255, 255, 255, 255)
        Grafikengine.recBild = Nothing
        Grafikengine.ptfRotCenter = Nothing
        Grafikengine.szfScale = Nothing
        Dim P As Point = Handler.InternePosition + Handler.Koordinaten
        Dim StartRechteck As New Rectangle(StartPosition.X + P.X, StartPosition.Y + P.Y, Hauptmenü.Feldbreite * 5 / 2 - 4, Hauptmenü.Feldbreite + 2)
        Grafikengine.ptfPosition.Y = StartPosition.Y + P.Y
        Grafikengine.ptfPosition.X = StartPosition.X + P.X
        For Y = 0 To Math.DivRem(Objektverwalter.AlleEinheiten.Length - 1, AnzahlderEinheiteninderBreite, 0) + 1
            For X = 0 To AnzahlderEinheiteninderBreite - 1
                If Handler.InVisibleArea(StartRechteck, False) Then
                    If X + Y * AnzahlderEinheiteninderBreite < Objektverwalter.AlleEinheiten.Length Then
                        Grafikengine.recBild = Nothing
                        Grafikengine.szfScale = New Size(Hauptmenü.Feldbreite * 2 + 4, Hauptmenü.Feldbreite + 2)

                        Grafikengine.Sprite.Draw2D(Texturen(0), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                        Grafikengine.ptfPosition.X += 1
                        Grafikengine.ptfPosition.Y += 1
                        If My.Settings.CommanderWarsGameMoodus = CommanderWarsGameModi.FireEmblem Then
                            Dim FireEmblemUnit As Fire_Emblem_MOD.FEUnit = Objektverwalter.AlleEinheiten(X + Y * AnzahlderEinheiteninderBreite).Einheit
                            With Grafikengine.recBild
                                .X = Frame * FireEmblemUnit.UnitSize.Width : .Width = FireEmblemUnit.UnitSize.Width
                                .Y = 0 : .Height = FireEmblemUnit.UnitSize.Height
                            End With
                            Grafikengine.szfScale = FireEmblemUnit.UnitSize
                        Else
                            With Grafikengine.recBild
                                .X = Frame * Hauptmenü.Feldbreite : .Width = Hauptmenü.Feldbreite
                                .Y = 0 : .Height = Hauptmenü.Feldbreite
                            End With
                            Grafikengine.szfScale = New Size(Hauptmenü.Feldbreite, Hauptmenü.Feldbreite)
                        End If
                        ObjektEinheit.Malen(Spieler, Frame, X + Y * AnzahlderEinheiteninderBreite, Farbe)
                        Grafikengine.ptfPosition.Y -= 1
                        Grafikengine.ptfPosition.X += Hauptmenü.Feldbreite + 1
                        Grafikengine.recBild = Nothing
                        If Checked(X + Y * AnzahlderEinheiteninderBreite) = True Then
                            Grafikengine.Sprite.Draw2D(Texturen(1), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                        Else
                            Grafikengine.Sprite.Draw2D(Texturen(2), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                        End If
                    Else
                        Frame = 1
                        Exit Sub
                    End If
                End If

                StartRechteck.X += Breite
                Grafikengine.ptfPosition.X = StartRechteck.X
            Next
            StartRechteck.X = StartPosition.X + P.X
            StartRechteck.Y += Höhe
            Grafikengine.ptfPosition.X = StartRechteck.X
            Grafikengine.ptfPosition.Y = StartRechteck.Y
        Next
        Frame = 1
    End Sub
    Public Sub UpdateBauliste()
        If TypeOf Objektverwalter.Menü Is ObjektKartenauswahlMenü Then
            Dim M As ObjektKartenauswahlMenü = Objektverwalter.Menü
            If Not M.Baulisten(Spieler.Spieler) Is Nothing Then
                For I = 0 To Checked.Length - 1
                    If M.Baulisten(Spieler.Spieler).GetWert(Objektverwalter.AlleEinheiten(I).EinheitenID) > 0 Then
                        Checked(I) = True
                    Else
                        Checked(I) = False
                    End If
                Next
            Else
                For I = 0 To Checked.Length - 1
                    Checked(I) = True
                Next
            End If
        End If
    End Sub
    Public Function CheckKlick(ByVal X As Integer, ByVal Y As Integer) As Boolean
        Dim P As Point = Handler.InternePosition + Handler.Koordinaten
        Dim StartRechteck As New Rectangle(StartPosition.X + P.X, StartPosition.Y + P.Y, Hauptmenü.Feldbreite * 5 / 2 - 4, Hauptmenü.Feldbreite + 2)
        For Y1 = 0 To Math.DivRem(Objektverwalter.AlleEinheiten.Length - 1, AnzahlderEinheiteninderBreite, 0) + 1
            For X1 = 0 To AnzahlderEinheiteninderBreite - 1
                If Handler.InVisibleArea(StartRechteck, False) Then
                    If X1 + Y1 * AnzahlderEinheiteninderBreite < Objektverwalter.AlleEinheiten.Length Then
                        If StartRechteck.Contains(X, Y) Then
                            If Hauptmenü.NetzConnected And TypeOf Objektverwalter.AlleEinheiten(X1 + Y1 * AnzahlderEinheiteninderBreite).Einheit Is EinheitCustom Then
                                'Custom Units sind nur auf dem eigenen PC erlaubt.
                                Return True
                            Else
                                If Checked(X1 + Y1 * AnzahlderEinheiteninderBreite) = True Then
                                    Checked(X1 + Y1 * AnzahlderEinheiteninderBreite) = False
                                Else
                                    Checked(X1 + Y1 * AnzahlderEinheiteninderBreite) = True
                                End If
                                MusikEngine.LoadWav(My.Settings.Resourcenpfad + "Sound\Checkbox.wav", False)
                                If TypeOf Objektverwalter.Menü Is ObjektKartenauswahlMenü Then
                                    Dim M As ObjektKartenauswahlMenü = Objektverwalter.Menü
                                    M.Spielerdaten(ObjektKartenauswahlMenü.MomentanerSpieler - 1).SetBauliste("Ind.")
                                End If
                            End If
                            Return True
                        End If
                    Else
                        Return False
                    End If
                End If
                StartRechteck.X += Breite
            Next
            StartRechteck.X = StartPosition.X + P.X
            StartRechteck.Y += Höhe
        Next
        Return False

    End Function
    Public Function GetTexturen() As Texture()
        Return Texturen
    End Function
    Public Sub ChangeWindowSize(ByVal PosChange As Point)
        StartPosition.X += PosChange.X * Fixed.X
        StartPosition.Y += PosChange.Y * Fixed.Y
        'StartPosition.X += PosChange.X * Fixed.X
        'StartPosition.Y += PosChange.Y * Fixed.Y
    End Sub
End Class
